上一章介绍了辅助组件(Guide)相关的知识,聊了坐标轴、图例的本质和绘制方法,这一章我们将简单了解一下统计函数(Statistic),看一看它是如何改变几何图形的位置的。

我们首先还是会从统计理论开始,然后实现几个比较常见的统计函数。接下来就让我们开始吧。
# 统计理论(Statistic)
在图形语法这本书中将统计定义为修改几何元素位置的函数,包括了以下这些函数。

这本书里除了统计可以修改几何元素的位置,几何元素的调整(Modifier)也是可以的,比如如下的这些。

因为它们拥有相同的功能,所以在这里我们都有统计函数去实现它们,并且在这里都把它们称为统计函数。接下来我们将实现以下的统计函数:
- 堆叠(StackY)
- 对称(SymmetryY)
- 归一化(NormalizeY)
- 分箱(BinX)
修改几何元素的位置就意味着修改或者产生位置通道的值,也就是在前面几何图形那章里面提到的 x、x1、y、y1 这些通道的值。这也是为什么上面的统计函数的名字是由 X 和 Y 结尾:X 说明该函数修改了该几何图形 x 通道的值,Y 说明该函数修改了该几何图形 x 通道的值。
具体的实现我们将在接下来的部分看到。正式开始写代码之前需要说明一点的是:目前代码中各个模块下的 utils.js 文件的内容都统一放到了 src/utils 这个文件夹下。
# 堆叠(StackY)
首先我们来看看堆叠(StackY),堆叠这个统计函数常常用于堆叠条形图和堆叠面积图。下面我们先来看一个简单的例子。
const rainfall = [
{ city: 'London', month: 'Jan.', rainfall: 18.9 },
{ city: 'London', month: 'Feb.', rainfall: 28.8 },
{ city: 'London', month: 'Mar.', rainfall: 39.3 },
{ city: 'London', month: 'Apr.', rainfall: 81.4 },
{ city: 'London', month: 'May', rainfall: 47 },
{ city: 'London', month: 'Jun.', rainfall: 20.3 },
{ city: 'London', month: 'Jul.', rainfall: 24 },
{ city: 'London', month: 'Aug.', rainfall: 35.6 },
{ city: 'Berlin', month: 'Jan.', rainfall: 12.4 },
{ city: 'Berlin', month: 'Feb.', rainfall: 23.2 },
{ city: 'Berlin', month: 'Mar.', rainfall: 34.5 },
{ city: 'Berlin', month: 'Apr.', rainfall: 99.7 },
{ city: 'Berlin', month: 'May', rainfall: 52.6